
//2187.完成旅途的最少时间
class Solution {
    //时间time内完成的旅途数目
    long long numsTime(vector<int>& nums,long long time)
    {
        long long ret=0;
        for(auto e:nums) ret+=time/e;

        return ret;
    }

public:
    long long minimumTime(vector<int>& time, int totalTrips) {
        //以时间作为二分，时间越长可以完成的旅途越多是单调的
        //最长时间可以设置为：min(time)*totalTrips即花费最短时间的车辆独自完成时间
        long long left=0,right=(long long)ranges::min(time)*totalTrips;
        while(left+1<right)
        {
            long long mid=left+(right-left)/2;
            if(numsTime(time,mid)>=totalTrips) right=mid;
            else left=mid;
        }
        return right;
    }
};